GdkEventPrivate *private = (GdkEventPrivate *)event;
new_private->screen = private->screen;
- new_private->device = private->device;
- new_private->source_device = private->source_device;
+ new_private->device = private->device ? g_object_ref (private->device) : NULL;
+ new_private->source_device = private->source_device ? g_object_ref (private->source_device) : NULL;
}
switch (event->any.type)
void
gdk_event_free (GdkEvent *event)
{
+ GdkEventPrivate *private;
GdkDisplay *display;
g_return_if_fail (event != NULL);
+ if (gdk_event_is_allocated (event))
+ {
+ private = (GdkEventPrivate *) event;
+ g_clear_object (&private->device);
+ g_clear_object (&private->source_device);
+ }
+
switch (event->any.type)
{
case GDK_KEY_PRESS:
private = (GdkEventPrivate *) event;
- private->device = device;
+ g_set_object (&private->device, device);
switch (event->type)
{
private = (GdkEventPrivate *) event;
- private->source_device = device;
+ g_set_object (&private->source_device, device);
}
/**